package org.pps.gl.client.vue;

import java.util.ArrayList;
import java.util.Collections;

import org.pps.gl.client.GetInfoService;
import org.pps.gl.client.GetInfoServiceAsync;
import org.pps.gl.client.LoginInfo;
import org.pps.gl.client.Pps_gl;
import org.pps.gl.client.data.MessageInfo;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Hyperlink;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.Button;

/**
 * Composite pour l'affichage d'un message
 * 
 */
public class ACL_Messages extends Composite {
	VerticalPanel flux;
	
	public ACL_Messages() {
		flux = new VerticalPanel();
		flux.setStyleName("profilMarge");
		Label titre = new Label("Mes messages");
		titre.setStylePrimaryName("titre");
		flux.add(titre);

		VerticalPanel verticalPanel = new VerticalPanel();
		flux.add(verticalPanel);
		verticalPanel.setWidth("306px");

		// Parcourir la liste des mails
		ArrayList<MessageInfo> mess = LoginInfo.getCurrentUser().getUserInfo()
				.getMessages();

		if (mess.isEmpty()) {
			Label vide = new Label("Vous n'avez aucun message");
			verticalPanel.add(vide);
		} else {
			// on trie les messages du plus récent
			Collections.reverse(mess);
			for (MessageInfo s : mess) {
				String r = s.getExpediteur();
				String t = s.getTitre();
				String m = s.getMessage();

				final Long idMessage = s.getMessageId();
				
				Label MTitre = new Label(t);
				MTitre.setStyleName("dynTitre");
				MTitre.setStylePrimaryName("dynTitre");
				verticalPanel.add(MTitre);

				HorizontalPanel line = new HorizontalPanel();
				verticalPanel.add(line);
				verticalPanel.setCellHorizontalAlignment(line,
						HasHorizontalAlignment.ALIGN_RIGHT);
				line.setSpacing(5);
				Hyperlink hyperlink = new Hyperlink("", "user/" + r);
				hyperlink.setStyleName("ficheHyper");
				hyperlink.setStylePrimaryName("ficheHyper");
				line.add(hyperlink);
				hyperlink.setSize("33px", "30px");
				Label label = new Label(r + " ");
				label.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
				line.add(label);
				line.setCellHeight(label, "10px");
				line.setCellVerticalAlignment(label,
						HasVerticalAlignment.ALIGN_MIDDLE);
				label.setSize("230px", "20px");
				line.setSize("168px", "27px");

				Button sup = new Button("");
				line.add(sup);
				line.setCellHorizontalAlignment(sup,
						HasHorizontalAlignment.ALIGN_CENTER);
				line.setCellVerticalAlignment(sup,
						HasVerticalAlignment.ALIGN_MIDDLE);
				sup.setStylePrimaryName("boutonSuppression");
				sup.setSize("21px", "21px");
				sup.addClickHandler(new ClickHandler() {
					public void onClick(ClickEvent event) {
						// suppression du message
						GetInfoServiceAsync infoService = GWT.create(GetInfoService.class);
						infoService.deleteMessage(idMessage, new AsyncCallback<Boolean>() {
							public void onSuccess(Boolean result) {
								// On rafraîchie les données sur la page
								Pps_gl.getCm().refresh();
								GWT.log("Message effacé.");
							}
							public void onFailure(Throwable caught) {
								GWT.log("Erreur d'effacement de message.");
							}
						} );
					}
				});

				TextArea corps = new TextArea();
				corps.setVisibleLines(3);
				corps.setEnabled(false);
				corps.setText(m);
				verticalPanel.add(corps);
				corps.setWidth("300px");
			}
		}
		initWidget(flux);
	}
}
